我有一个希伯来语新闻网站。数据库中的所有希伯来语数据都以latin1_swedish_ci编码存储。如何将希伯来语数据库从latin1_swedish_ci转换为utf8?
除了通过phpMyAdmin转换列编码之外,我需要转换数据本身。
有没有简单的方法来做到这一点?
丹尼尔。
我有一个希伯来语新闻网站。数据库中的所有希伯来语数据都以latin1_swedish_ci编码存储。如何将希伯来语数据库从latin1_swedish_ci转换为utf8?
除了通过phpMyAdmin转换列编码之外,我需要转换数据本身。
有没有简单的方法来做到这一点?
丹尼尔。
由于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 |
+------+--------+-----------+----------------+
在没有你的情况下测试不同有什么办法?
它在utf8中(转向Ð到D790)。 但是第二行: ALTER TABLE'pages' MODIFY COLUMN'title' VARCHAR(255)CHARACTER SET utf8; 留下了一个空白栏。 – Daniel
查看更新.... –
latin1是否可以包含希伯来字符? – Evert