我有一个希伯来语的新闻网站。数据库中的所有希伯来语数据都存储在latin1_swedish_ci编码中。
除了通过phpMyAdmin转换列编码之外,我还需要转换数据本身。
有没有简单的方法可以做到这一点?
丹尼尔。
答案 0 :(得分:0)
由于latin1
不包含希伯来字符,因此您有一种特殊的混乱形式。但是,它可以修复"。但首先,我们需要知道在执行INSERTs
时您使用的编码。也许是hebrew
,也许是utf8
?
要了解,请执行
SELECT col, HEX(col) FROM tbl WHERE ...
例如:א
,在utf8中将为十六进制D790
;在hebrew
中,它将是E0
如果文本是utf8(主要是Dxxx),我们可以执行两步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 ...;
前2个(3个)步骤不关于编码是什么; 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 |
+------+--------+-----------+----------------+
您的测试用例有何不同?