2015-10-06 77 views

回答

0

由於latin1不包含希伯來字符,因此您有一種特殊的混亂形式。但是,它可以是「固定的」。但首先,我們需要知道在執行INSERTs時你有什麼編碼。也許hebrew,或許utf8

爲了找到答案,做

SELECT col, HEX(col) FROM tbl WHERE ... 

例如:א,在UTF8是十六進制D790;在hebrew,這將是E0

如果文字是UTF8(主要是Dxxx表示),我們可以做2步ALTER解決它:

ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...; 
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...; 

如果hebrew,那麼我認爲需要3個步驟:

ALTER TABLE Tbl MODIFY COLUMN col VARBINARY(...) ...; 
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET hebrew ...; 
ALTER TABLE Tbl MODIFY COLUMN col VARCHAR(...) ... CHARACTER SET utf8 ...; 

3個步驟中的前2個步驟取決於編碼是什麼; 3 ALTER轉換列定義和字節(E0 - > D790等)。

更新

CREATE TABLE h2u (c VARCHAR(9) CHARACTER SET latin1); 
INSERT INTO h2u (c) VALUE (UNHEX('D790')); 
SELECT c, HEX(c), LENGTH(c), CHAR_LENGTH(c) FROM h2u; 
+------+--------+-----------+----------------+ 
| c | HEX(c) | LENGTH(c) | CHAR_LENGTH(c) | 
+------+--------+-----------+----------------+ 
| × | D790 |   2 |    2 | 
+------+--------+-----------+----------------+ 

# Now to fix it... 
ALTER TABLE h2u MODIFY COLUMN c VARBINARY(9); 
ALTER TABLE h2u MODIFY COLUMN c VARCHAR(9) CHARACTER SET utf8; 
SELECT c, HEX(c), LENGTH(c), CHAR_LENGTH(c) FROM h2u; 
+------+--------+-----------+----------------+ 
| c | HEX(c) | LENGTH(c) | CHAR_LENGTH(c) | 
+------+--------+-----------+----------------+ 
| א | D790 |   2 |    1 | 
+------+--------+-----------+----------------+ 

在沒有你的情況下測試不同有什麼辦法?

+0

它在utf8中(轉向Ð到D790)。 但是第二行: ALTER TABLE'pages' MODIFY COLUMN'title' VARCHAR(255)CHARACTER SET utf8; 留下了一個空白欄。 – Daniel

+0

查看更新.... –