Как очистить данные UTF-8 для MySQL - PullRequest
1 голос
/ 01 августа 2011

У меня есть текстовые данные UTF-8 из Твиттера (так что они могут быть очень грязными).При вводе в mysql (набор символов базы данных - utf8) часть текста подвергается обработке.Я хотел бы очистить данные перед их вводом.

Insert ignore search_tweets set id_str = 'pass1',text = 'RT @youpon_info: Youponです!この度はキャンペーン参加ありがとうございました。たくさんの方々にキャンペーンに参加して頂きました。'  ;
Insert ignore search_tweets set id_str = 'fail',text = 'RT @youpon_info: Youponです!この度はキャンペーン参加ありがとうございました。たくさんの方々にキャンペーンに参加して頂きました。また次のキャンペーンをすぐに予定しております!もう少'  ;
Insert ignore search_tweets set id_str = 'pass2',text = 'また次のキャンペーンをすぐに予定しております!もう少'  ;

fail.text = pass1.text + pass2.text, и они оба входят и выходят из mysql нормально.fail выходит как

RT @youpon_info: Youponã§ãï¼ãã®åº¦ã¯ã­ã£ã³ãã¼ã³åå ãããã¨ããããã¾ãããããããã®æ¹ã

Я сделал это с прямыми вызовами MySQL, хотя изначально все это было сделано в Ruby datamapper и прямыми вызовами.

Я хотел бы знать, как очиститьданные, так что он входит / выходит из MySQL то же самое.Если возможно, было бы неплохо решение с рубином, но просто знать, как его очистить, было бы здорово.

1 Ответ

3 голосов
/ 01 августа 2011

Похоже, что данные усекаются. Достаточно ли в столбце text места для вставляемых данных?

Я подозреваю, что varchar(n) будет принимать только n байтов, а не n символов, а японские символы занимают по 3 байта каждый. Mysql известен тем, что он молча усекает данные, которые не вписываются, и если они оказываются усеченными в середине символа UTF-8, читатель может решить, что это неправильный UTF-8, и интерпретировать его как ISO8859-1, что приведет к в том, что вы видите.

Обратите внимание, что в UTF-8 все символы живых языков умещаются в 3 байта (в китайском, японском и корейском все те, в которых всегда нужны все 3), а расширенные символы и исторические сценарии требуют 4 байта. Поэтому, чтобы оставаться в безопасности, база данных должна быть готова принять в 4 раза больше байтов, чем допустимо символов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...