【问题标题】:Convert characters to UTF8 in MySQL (é to é)在 MySQL 中将字符转换为 UTF8(é 到 é)
【发布时间】:2013-04-11 21:45:47
【问题描述】:

我遇到了 MySQL 问题。除了我的数据库之外,我的整个网站都是 UTF8 格式的。我最近刚刚尝试使用各种命令将其转换为 UTF8,但主要问题仍然存在:

重音不起作用。而不是é,我有é。 è也一样,还有另一种奇怪的字符。

是否有一个简单的方法可以将所有这些字符转换为 é,比如 é,在基础中?

非常感谢。

(顺便说一下,数据库是latin1的)

【问题讨论】:

标签: mysql utf-8 character diacritics latin


【解决方案1】:

在这种情况下,éé 解释为 LATIN1 并转换为 UTF-8。可能是您的数据库试图提供帮助并转换为不需要转换的 UTF-8。

您是否尝试过切换数据库表上的字符集?

【讨论】:

  • 是的,我确实有。它说它是UTF8,但仍然是同样的问题。很奇怪。但是有没有办法将已经存在的字符转换为普通字符?
  • 我有一个answer for a related question 来解决这个问题。如果您有勇气并有备份,则可以将其切换为UPDATE 声明。
  • 非常感谢。我要试试。我觉得很勇敢,而且我有备份,所以为什么不呢:-)
【解决方案2】:

你可以试试这个功能:

CREATE TABLE `utf8decodemap` (
  `id` INT(11) NOT NULL AUTO_INCREMENT,
  `encoded` VARCHAR(128) NOT NULL,
  `decoded` VARCHAR(128) NOT NULL,
  UNIQUE KEY urlcodemapUIdx1(encoded),
  PRIMARY KEY (`id`)  
);

INSERT INTO utf8decodemap (decoded,encoded) VALUES ("â","â");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("é","é");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("è","è");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("ê","ê");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("ë","ë");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("î","î");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("ï","ï");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("ô","ô");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("ö","ö");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("ù","ù");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("û","û");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("ü","ü");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("ç","ç");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("œ","Å?");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("€","â¬");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("°","°");
INSERT INTO utf8decodemap (decoded,encoded) VALUES ("à","Ã");

DELIMITER $$
CREATE FUNCTION `utf8decoder`(str VARCHAR(4096)) RETURNS VARCHAR(4096) DETERMINISTIC
BEGIN
               DECLARE X  INT;               
               DECLARE chr VARCHAR(256);
               DECLARE chrto VARCHAR(256);
               DECLARE result VARCHAR(4096);
               SET X = 1;
               WHILE X  <= (SELECT MAX(id) FROM utf8decodemap) DO
                   SET chr = (SELECT `encoded` FROM utf8decodemap WHERE id = X);
                   SET chrto = (SELECT `decoded` FROM utf8decodemap WHERE id = X);                
                           SET str = REPLACE(str,chr,chrto);
                           SET  X = X + 1;                           
               END WHILE;
               RETURN str;
       END$$

DELIMITER ; 

ex : 从 MYtable 中选择 utf8decoder(MyCol)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-10
    • 2014-07-25
    • 2013-03-25
    • 1970-01-01
    相关资源
    最近更新 更多