MySQL – Convertir une base ISO8859-1 en UTF-8

1) Exporter la base mysql à convertir avec mysqldump

2) Créer une nouvelle base encodée en UTF-8

3) Remplacer dans le fichier de dump les lignes

"CHARSET=xxx"

par

"DEFAULT CHARACTER SET UTF-8 COLLATE UTF-8"

4) Convertir la base avec la commande *nix : iconv

iconv -f ISO8859-1 -t UTF-8 fichier_iso8859.txt > fichier_utf8.txt

5) Importer le dump dans la nouvelle base

App

MySQL – Exporter et Importer une table

Pré-requis

dbname: nom de la base de données
tablename: nom de la table à exporter

Exporter les données d’une base mysql en CSV séparée par des virgules:

mysqldump -uroot -p --tables dbname tablename --tab=dirname --fields-terminated-by=',' > tablename.txt

Importer le fichier tablename.txt:

echo "TRUNCATE dbname.tablename;LOAD DATA INFILE '/path_to_file/dirname/tablename.txt' INTO TABLE dbname.tablename FIELDS TERMINATED BY ',' (id, field1, field2, field3, field4, field5, field6);" | mysql -uroot -p

App

MySQL – Outil de modélisation

DBDesigner

Pour une archi AMD 64bits sous Debian :
dbdesigner-fork, tar -zxfv du *.bin-i386-linux.tar.gz,
puis cd bin && ./startdbd_usingAMD64

App

MySQL – Créer un utilisateur

A l’aide du client mysql :

  • Création d’un nouvelle base ainsi qu’un nouvel utilisateur ayant les pleins droits sur celle-ci :
    mysql -uroot -p
    <enter_mysql_root_pass>
    CREATE DATABASE <DB_NAME>;
    GRANT ALL PRIVILEGES ON <DB_NAME>.* TO 'my_user'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;
  • Élargir les droits utilisateur aux autres bases :
    GRANT ALL PRIVILEGES ON *.* TO 'my_user'@'localhost' IDENTIFIED BY 'my_password' WITH GRANT OPTION;
  • Élargir les droits utilisateur pour un accès distant (autre que localhost)
    GRANT ALL PRIVILEGES ON <DB_NAME>.* TO 'my_user'@'%' IDENTIFIED BY 'my_password' WITH GRANT OPTION;

Source

App

MySQL – Modifier le mot de passe root

Etant vide par défaut (snif), voici 2 façons pour modifier le mot de passe root de mysql :

  • SET PASSWORD FOR

mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpass');

  • mysqladmin

mysqladmin -u root password "newpass"

App

PDO MySQL pour Zend Framework

1) installation des paquets debian contenant les extensions PDO et PDO_MYSQL

apt-get install php5-pdo
apt-get install php5-pdo-mysql

2) modification du fichier de configuration PHP5

/etc/php5/apache2/php.ini
extension=pdo.so
extension=pdo_mysql.so

3) redémarrage du service apache2

/etc/init.d/apache2 restart

Une fois installé il reste à se familiariser avec le composant Zend_Db.

App

MySQL – Changer la valeur de l’autoincrement

ALTER TABLE tbl AUTO_INCREMENT = 100;

App

Tuning LAMP

Article traitant du Tuning d’un environnement LAMP.

Source IBM

App

Parsing XML et insertions MySQL avec Perl

Installation des modules DBI et XML::XPath via CPAN

perl -MCPAN -e 'install DBI'
perl -MCPAN -e 'install XML::XPath'

ou

apt-get install libxml-xpath-perl

data.xml
<?xml version="1.0" encoding="UTF-8"?>
<data>
<people>
<name>alexandre</name>
<surname>alex</name>
<age>30</age>
</people>
<people>
<name>alice</name>
<surname>ali</name>
<age>30</age>
</people>
</data>

parser.pl
#!/usr/bin/perl -w
use strict;
use DBI;
use XML::XPath;
use XML::XPath::XMLParser;
my $dbh = DBI->connect ("DBI:mysql:dbname",
"mysql_user", "mysql_password",
{ RaiseError => 1, PrintError => 0});
my $xp = XML::XPath->new (filename => $ARGV[0]);
my $nodelist = $xp->find ("//people");
foreach my $row ($nodelist->get_nodelist ())
{
$dbh->do (
"INSERT INTO test (field1, field2, field3) VALUES (?,?,?)",
undef,
$row->find ("field1")->string_value (),
$row->find ("field2")->string_value (),
$row->find ("field3)")->string_value ()
);
}
$dbh->disconnect ();

Using XML with MySQL

MySQL – Supprimer des doublons

Exemple sur une table list contenant 2 champs:

  • id_list (clef primaire auto incrémentale)
  • name (varchar)

Lister les doublons:

SELECT name, count( * )
FROM list
GROUP BY name
HAVING count( * ) >1

Supprimer les doublons:

delete bad_rows.* from list as good_rows inner join list as bad_rows on bad_rows.name = good_rows.name and bad_rows.id_list > good_rows.id_list

App

Configurer UTF-8 de bout en bout

Editeur

Les fichiers doivent être encodés en utf-8.

HTML

Pour le code HTML il suffit de spécifier l’encodage à l’aide de cette balise :

<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>

Apache

httpd.conf /.htaccess :

AddDefaultCharset UTF-8

MySQL

  • utf8_bin (sensible à la casse)
  • utf8_general_ci

PHP

Attendre PHP 6 ;=)

Troubleshooting

  • Si la page affiche des caractères de ce type : « Ã© », « Ã® », « Ã », …
    => Les données ont été enregistrées au format UTF-8, et le navigateur les affiche en pensant avoir affaire à de l’ISO.
  • Si la page affiche des caractères de ce type : « � »
    => Les données ont été enregistrées au format ISO, et le navigateur les affiche en pensant avoir affaire à de l’UTF-8.
  • Si les données sont codées en dur dans la page, voir l’encodage de l’éditeur de texte, l’header apache et la balise meta « charset ». Si les données proviennent de la base, vérifier le format de stockage et les méthodes de lecture et d’insertion (SET NAMES et charset). Si les données proviennent de l’extérieur (web services, rss, …), penser à convertir les chaînes de caractère (utf8_encode-decode et fonctions du module iconv).

En savoir plus

Recent Tweets

Catégories