Trabajar con MySQL y utf-8 en PHP

Ayer mientras trabajábamos en la nueva versión de mivecindad.com tuvimos que importar al modelo de datos el listado de países del mundo en varios idiomas. Esta información la obtuvimos de Geonames en formato XML (también hay otros formatos). La primera opción fue usar LOAD XML de MySQL, pero la versión de MySQL que tenía en mi entorno no soportaba este comando. Fue entonces cuando decidí hacer un pequeño script en PHP para procesar el archivo XML y posteriormente insertarlo en la base de datos. De ahí obtuve el SQL que podré reutilizar en otros proyectos y compartirlo con nuestros compañeros de Toolea.

El motivo de escribir esta pequeña entrada es para que no se me olvide que si queremos trabajar con MySQL y utf-8, y lo hacemos usando en API de PHP (sin librerías ni frameworks) no se nos puede olvidar indicar que nuestra sesión con MySQL (que actúa de cliente) use utf-8. Por muy a pesar de que MySQL tenga configurado en el servidor que su encoding por defecto sea utf-8. Eso sirve, entre otras cosas, para la creación de nuevos esquemas.

Os dejo un ejemplo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$xml = simplexml_load_file('/home/recena/countries_es.xml');
$link =  mysql_connect('localhost', 'root', '');
mysql_select_db('mivecindad', $link);
if(!$link) {
    die('No pudo conectarse: ' . mysql_error());
}
mysql_query("SET NAMES 'utf8';");
foreach($xml as $key => $value) {
    $capital = mysql_real_escape_string($value->capital);
    $sql = "INSERT INTO MV_PAIS (CAPITAL) VALUES('".$capital."')";
    $result = mysql_query($sql);
    if(!$result) {
        die('Invalid query: ' . mysql_error());
    }
}
mysql_close($link);

Leave a Reply

Your email address will not be published. Required fields are marked *