Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: jak zmienic kodowanie, mysql 3, 4.0
Forum PHP.pl > Forum > Bazy danych > MySQL
dr_bonzo
Mam baze w MySQL'u 4.0 (docelowo ma byc w 3ce -- wiem ze LOL, ale coz ja poradze) (nawet skompilowalem ponownie z wszystkimi charsetami)
Cytat
character set --> latin1
character sets -->  latin1 big5 cp1251 cp1257 croat czech danish dec8 dos estonia euc_kr gb2312 gbk german1 greek hebrew hp8 hungarian koi8_ru koi8_ukr latin1_de latin2 latin5 sjis swe7 tis620 ujis usa7 win1250 win1251ukr win1251

i probuje ustawic kodowanie na 'latin2' i tak:
SET CHARACTER SET latin2 --> 1115 Unknown character set: 'latin2'
SET NAMES latin2 --> 1193: Unknown system variable 'NAMES'
tak samo dla latin1

SET character_set_client = x;
SET character_set_results = x;
--> brak takich zmiennych.

Dla mysql 4.1, 5.0 to dziala.

Pytanie jest proste: WTF?
O co chodzi, czemu to nie dziala (przyklady z manuala dla starego mysqla http://dev.mysql.com/doc/refman/4.1/en/cha...onnection.html), jak to zrobic smile.gif [tu powinno znalezc sie pliss z dwustoma 's' tongue.gif]
Kinool
no a jak przelozysz baze to masz krzaki?? czy nie sprawdzales?? problemy z kodowaniem pojawily sie w 4.1 bo zmianiono tam domyslne przechowywanie w wersji 3.x i 4.x powinno byc chyba ok bez zadnych konersji (tak mi sie wydaje)
dr_bonzo
Baze mam pusta, i bede dopiero wprowadzal dane.
Kodowanie jest ustawione na latin1 i nie moge go zmienic (moze sie nie da w tej wersji?questionmark.gif).
dudus1
Witam, tez borykam się od kilku ostatnich dni z problemem zmiany domyślnego kodowania bazy. Mój problem dotyczy bazy MySQL 5.0 postawionej na Windows 2000. Podczas konfiguracji zaznaczyłem w zakładce kodowania znaków

"Manual Selected Default Character Ser / Collation"

i wybrałem

"latin2"

Jednak w konsoli tekstowej po wykonaniu polecenia

mysql> show variables like "%char%";

miałem

| Variable_name | Value
| character_set_client | latin1
| character_set_connection | latin1
| character_set_database | latin2
| character_set_results | latin1
| character_set_server | latin2
| character_set_system | utf8
| character_sets_dir | /usr/share/mysql/charsets/


Udało mi się dojść do tego jak ustawić "latin2" dla pierszych 5-ciu pozcji character...

W pliku "my.ini" w sekcji [mysql] i [mysqld] dopisałem

default-character-set=latin2
character-sets-dir="C:/Program Files/MySQL/MySQL Server 5.0/share/charsets"


I zawartość tych sekcji w pliku "my.ini" wygląda tak:

Cytat
.
..
...
[mysql]
default-character-set=latin2
character-sets-dir="C:/Program Files/MySQL/MySQL Server 5.0/share/charsets"


# SERVER SECTION
# ----------------------------------------------------------------------
#
# The following options will be read by the MySQL Server. Make sure that
# you have installed the server correctly (see above) so it reads this
# file.
#
[mysqld]

# The TCP/IP Port the MySQL Server will listen on
port=3306

#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/Program Files/MySQL/MySQL Server 5.0/"

#Path to the database root
datadir="C:/Program Files/MySQL/MySQL Server 5.0/Data/"

# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=latin2
character-sets-dir="C:/Program Files/MySQL/MySQL Server 5.0/share/charsets"

...
..
.


Po tych zmianach w pliku "my.ini" i zapisaniu zmian, wykonując polecenie

mysql> show variables like "%char%";

dostałem

| Variable_name | Value
| character_set_client | latin2
| character_set_connection | latin2
| character_set_database | latin2
| character_set_results | latin2
| character_set_server | latin2
| character_set_system | utf8
| character_sets_dir | /usr/share/mysql/charsets/


Teraz pozostała mi jeszcze zmiana "character_set_system" z utf8 na latin2.

Jeżeli ktoś wie jak to zrobić to proszę o informację.
Kinool
@dudus1 nie jestem pewien czy to zrobisz, wydaje mi sie ze utf8 systemem w jakim sa przechowywane informacje i mozesz jedynie zmieniac inne wartosci ale nie jestem tego pewien
dudus1
Cytat(Kinool @ 2005-12-07 11:44:04)
@dudus1 nie jestem pewien czy to zrobisz, wydaje mi sie ze utf8 systemem w jakim sa  przechowywane informacje i mozesz jedynie zmieniac inne wartosci ale nie jestem tego pewien

Witaj Kinool, prawdopodobnie możesz mieć rację. W manualu na stronie

http://dev.mysql.com/doc/refman/5.0/en/charset-server.html

nie mogłem znaleźć żadnego polecenia do zmiany tej wartości.
popo
W manualu mysql'a jest gdzies napisane, ze od wersji jakiejstam (pisze z pamieci) ze wzgledu na to, iz kazda kolumna w tabeli moze miec inne niezalezne kodowanie, zmieniono kodowanie tabel systemowych na utf8.
Tylko to daje mozliwosc zapamietania nazw tabel i komumn z uwzglednieniem roznych systemow kodowania znakow (utf8 jest standartem kodowania pozwalajacym na przedstawienie w formie numerycznej znakow alfabetow prawie wszystkich jezykow swiata) bylo tam tez cos o niepelnym sparciu dla utf2,4 i 16 o ile sie nie myle.

Wniosek z tego jeden tabele systemowe sa w utf8 i nijak ich kodowania nie zmienisz. Nie wplywa to jednak w zaden sposob na funkcjonalnosc tworzonych baz danych po wybraniu odopowiedniego kodowania i collation dla bazy wszystkie tabele powinny wewnatrz bazy zachowac te same ustawienia i nie powinno byc problemu z kodowaniem latin2 tylko odpowiednie collation trzeba ustawic zeby sotrowanie bylo poprawne
dudus1
No widzicie jak pięknie się rozwija ten wątek, jestem pod wrażeniem i chyle czoła wszystkim zaangażowanym.

Doprowadziłem bazę do stanu "latin2". Podczas wszelkich czynności (edycja, dopisywanie, usuwanie, zakładanie, itp.) baza zapisuje polskie ogonki prawidłowo i prawidłowo zwraca wyniki zapytania "select" ale tylko w konsoli tekstowej. Jednak problem mam podczas pobierania danych z bazy i wyświetlenia ich na stronie.

Dodam, że kodowanie strony jest iso-8859-2, a wszelkie pliki .php, .html zakodowane w Pajączku z zastosowaniem wymienionego kodowania polskich znaków.

A efekt taki, ZNAKI ZAPYTANIA W MIEJSCACH POLSKICH LITER.

Rozpoczołem więc swoje poszukiwania po necie i jak na razie nic. Zauważyłem coś takiego przy zainstalowanym phpMyAdmin'ie (wersja 2.7.0.pl1), że gdy uruchomię go w przeglądarce to mam tylko do wyboru języki kodowania z zakresu "utf-". Dodam, że w pliku

"config.default.php"

zmieniłem kodowanie iso w pozycji
$cfg['DefaultLang'] = 'en-iso-8859-1';
na
$cfg['DefaultLang'] = 'en-iso-8859-2';
i w pozycji
$cfg['DefaultCharset'] = 'iso-8859-1';
na
$cfg['DefaultCharset'] = 'iso-8859-2';

i wybierając

Zmienne systemowe serwera MySQL

mam następujące dane (podaję tylko część wartości
Cytat
.
..
...
| wartość sesji | wartość globalna
character set client | utf8 | latin2
character set connection | utf8 | latin2
character set database | latin2 | latin2
character set results | utf8 | latin2
character set server | latin2 | latin2
character set system | utf8 | utf8
character sets dir | C:/Prog.../charsets | C:/Prog.../charsets
collation connection | latin2_general_ci | latin2_general_ci
collation database | latin2_general_ci | latin2_general_ci
collation server | latin2_general_ci | latin2_general_ci
...
..
.


Irytuje mnie niezgodność w pozycji character set client, character set connection i character set results.
Czy może to mieć wpływ na sposób wyświetlania danych na stronie www ? (przypuszczam, że tak)
Czy można te wartości ustawić tak, aby były w obu przypadkach (wartość sesji i wartość globalna) jednakowe, a więc latin2 ?
Czy może jest jakiś problem z pracą bazy MySQL 5.0.15 w windows ?

Liczy się dla mnie każda odpowiedź.
isia
Mam dokładnie ten sam problem... nie mogę znaleźć rozwiązania.
Może ktoś coś podpowie - może przy wyświetlaniu zamieniać znaki.
sad.gif
basu
Ja natomiast zainstalowalem sobie wamp 1.6
strona ma kodowanie utf-8 (robiona w palaczku)
administruje baza mysql 5.0.17 za pomoca PDO. wszystko ladnie chodzi, polskie koncowki sa ale jak wszedlem do phpmyadmin (utf_polish_ci lub utf_general - do wyboru, nie widac zadnych roznic po zmianie) to widac krzaczki.
MOglbym juz sobie podarowac, bo wszystko ladnie wyglada na stronie, ale podczas polecenia 'SELECT cos like '%".$zmienna."%', to szuka wg kodowania zlego zapisanego w bazie. Wie ktos ja to zmienic. Przeszukalem chyba wszystko i nic. Ciagle jest zly zapis do bazy, a wszedzie jest na utf8.
popo
proponuje uzyc nastepujacych komend sql'a
  1. SET NAMES 'charset_name'
  2. SET CHARACTER SET charset_name
ustawia toto kodowanie znakow na polaczeniu php-mysql
Trzeba tylko poprawny characterset wybrac i powinno byc oki
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.