2015-10-06 74 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

查看更新.... –