Mysql Hibernate A Polskie Znaki

Hibernate jest mądry i fajny, ale nie aż tak żeby tworzył kolumny w których kodowaniem znaków jest przyjmujące polskie znaki. Przy tworzeniu bazy danych hibernate nie specyfikuje kodowania i porządku1 typach VARCHAR. Wtedy dane te są pobierane z wartości domyślnych tabeli, które też nie są przez Hibernata specyfikowane, i pobierane są z wartości domyślnych bazy danych, które są specyfikowane bóg-wie-gdzie.

Czyli defaulty wyglądają tak:

  1. kodowanie kolumny
  2. kodowanie tabeli
  3. kodowanie schematu
  4. kodowanie mysql

U mnie kodowanie mysql2 domyślnie ustawione jest cp1252. Czyli nie ma polskich znaków …

Jedynym rozwiązaniem jest przy tworzeniu schematu ustawić mu ręcznie CHARSET i COLLATION.

Z podręcznika MySQL

CREATE {DATABASE | SCHEMA} [IF NOT EXISTS] db_name
    [create_specification] ...
 
create_specification:
    [DEFAULT] CHARACTER SET [=] charset_name
  | [DEFAULT] COLLATE [=] collation_name

Czyli u nas jakoś tak:

    CREATE DATABASE CHARACTER SET = utf8

Będziemy używać utf-a żeby nie musieć pisać użytkownikowi: 'pana imie nie może zawierać e z akcentem'.

A co jeśli chcę zmienić kodowanie w bazie która istnieje.

Pewno da się jakimś skryptem… Ale ja jestem dzieckiem neostrady i po to używam Hibernejta żeby nie umieć SQLa.

To robimy tak. W gui MySQL (mysqladmin) robiy backup bazy danych zaznaczając opcję NO CREATES3.

Dropujemy bazę dancyh.

Tworzymy nową z ustawionym kodowaniem.

Odpalamy jeszcze raz Hibernejta (z opcją tworzenia schematyu danych) — mamy już tabelki.

Za pomocą linii komend mysqla (mysql) wywołujemy polecenie source [ścieżka do pliku z backupem] — co zaimportuje dane

O ile nie zaznaczono inaczej, treść tej strony objęta jest licencją Creative Commons Attribution-NonCommercial-NoDerivs 3.0 License