Pues ando con los cambios de HablaJapones.org
Importando algunos kanjis me dí cuenta que se estaban agregando mal algunos… y oh sorpresa!!! Hay caracteres unicode de 4 bytes (normalmente solo son de 3). Revisando ya vi que en todos lados dicen que es de 1-4, pero en la practica me había tocado solo 3 bytes…
He vivido engañado toda mi vida…
Al parecer MySQL 5.1 solo soporta utf8 (un subset de unicode de 3 caracteres). En MySQL 5.5.3+ agregaron utf8mb4 que ya soporta 4 bytes (UTF8 completo).
Por ejemplo 本 ocupa solo 3 caracteres:
c='本' c.encode() b'\xe6\x9c\xac'
Sin embargo, http://graphemica.com/%F0%A0%98%A8 necesita 4 caracteres:
c='' #revisar el kanji en http://graphemica.com/%F0%A0%98%A8 c.encode() b'\xf0\xa0\x98\xa8'
Aquí hay información de UTF8 y caracteres unicode:
http://es.wikipedia.org/wiki/UTF-8
Ahora bien, MySQL 5.1 soporta nativo solo unicode de 3 caracteres (utf8), pero MySQL 5.5.3+ soporta unicode de 4 caracteres (utf8mb4).
Solución (para caracteres japoneses por ejemplo):
- Usar MySQL 5.5.3+
- Después de conectarse, no esta de mas ejecutar ‘SET NAMES utf8mb4 COLLATE utf8mb4_unicode_520_ci’
- Usar de default el utf8mb4 y el collation utf8mb4_unicode_520_ci
- utf8mb4 es un superset de utf8, así que todo debe seguir igual.
- Si no se usa utf8mb4_unicode_520_ci al buscar caracteres extendidos u+20000 todos los toma como iguales, así que los select devolverá un montón en vez de solo el que debe
Referencia:
https://mathiasbynens.be/notes/mysql-utf8mb4
http://bugs.mysql.com/bug.php?id=69679
Definitivamente lo super compruebo eres in nerd! 😉
Claro que no!!! Simplemente soy … culto 🙂 jajaja