J'ai un comportement très étrange de mysql. La sélection ci-dessous RENDEMENTS 0:Caractères hexadécimaux dans regexp correspondant dans mysql
SELECT CONVERT('a' USING BINARY) REGEXP '[\x61]'
Cependant sémantiquement sélectionnez ci-dessous RENDEMENTS 1:
SELECT CONVERT('a' USING BINARY) REGEXP '[\x61-\x61]'
Savez-vous ce qui se passe ici? J'ai testé cela dans mysql 5.0.0.3031 et 4.1.22
J'ai besoin des caractères hexadécimaux pour créer une expression rationnelle qui correspond lorsqu'une chaîne binaire est encodée dans utf8. Une version perl de cette expression rationnelle peut être trouvée sur w3c site. Il semble comme suit:
$field =~
m/\A(
[\x09\x0A\x0D\x20-\x7E] # ASCII
| [\xC2-\xDF][\x80-\xBF] # non-overlong 2-byte
| \xE0[\xA0-\xBF][\x80-\xBF] # excluding overlongs
| [\xE1-\xEC\xEE\xEF][\x80-\xBF]{2} # straight 3-byte
| \xED[\x80-\x9F][\x80-\xBF] # excluding surrogates
| \xF0[\x90-\xBF][\x80-\xBF]{2} # planes 1-3
| [\xF1-\xF3][\x80-\xBF]{3} # planes 4-15
| \xF4[\x80-\x8F][\x80-\xBF]{2} # plane 16
)*\z/x;
J'ai supprimé la balise 'utf-8' car cette question concerne purement la syntaxe de MySQL. Votre autre question est celle qui traite des aspects UTF-8: http://stackoverflow.com/questions/2199825/how-can-i-check-if-a-binary-string-is-utf-8-in -mysql –