{"id":254,"date":"2011-07-28T12:32:18","date_gmt":"2011-07-28T12:32:18","guid":{"rendered":"http:\/\/www.extradrm.com\/?p=254"},"modified":"2011-07-28T12:32:18","modified_gmt":"2011-07-28T12:32:18","slug":"jeux-de-caracteres-et-collation-generalites","status":"publish","type":"post","link":"https:\/\/www.extradrm.com\/?p=254","title":{"rendered":"Jeux de caract\u00e8res et collation : g\u00e9n\u00e9ralit\u00e9s"},"content":{"rendered":"<p>Un <strong>jeu de caract\u00e8res<\/strong> est un ensemble de symboles et de codes. Une <strong>collation<\/strong> est un ensemble de r\u00e8gles permettant la comparaisons de caract\u00e8res dans un jeu. Pour rendre ces d\u00e9finitions plus concr\u00e8tes, voici un exemple avec un alphabet imaginaire.<\/p>\n<p>Supposons que nous avons un alphabet de 4 lettres\u00a0: \u2018<code>A<\/code>\u2019, \u2018<code>B<\/code>\u2019, \u2018<code>a<\/code>\u2019, \u2018<code>b<\/code>\u2019. Nous assignons \u00e0 chaque lettre un nombre comme ceci\u00a0: \u2018<code>A<\/code>\u2019 = 0, \u2018<code>B<\/code>\u2019 = 1, \u2018<code>a<\/code>\u2019 = 2, \u2018<code>c<\/code>\u2019 = 3. La lettre \u2018<code>A<\/code>\u2019 est un symbole, le chiffre 0 est le <strong>code<\/strong> de \u2018<code>A<\/code>\u2019, et la combinaison des quatre lettres et de leur code forme le <strong>jeu de caract\u00e8res<\/strong>.<\/p>\n<p>Maintenant, supposons que nous voulions comparer deux cha\u00eenes de caract\u00e8res\u00a0: \u2018<code>A<\/code>\u2019 et \u2018<code>B<\/code>\u2019. Le plus simple pour cela est de regarder leurs codes\u00a0: 0 pour \u2018<code>A<\/code>\u2019 et 1 pour \u2018<code>B<\/code>\u2019, et comme 0 est inf\u00e9rieure \u00e0 1, nous pouvons dire que \u2018<code>A<\/code>\u2019 est plus petit que \u2018<code>B<\/code>\u2019. Ce que nous venons de faire est une collation pour notre jeu de caract\u00e8res. la collation est un ensemble de r\u00e8gle, qui se r\u00e9sume \u00e0 ceci dans notre cas\u00a0: &#8220;compare les codes&#8221;. Cette r\u00e8gle est la plus simple collation <strong>binaire<\/strong>.<\/p>\n<p>Si nous devons diff\u00e9rentier les majuscules des minuscules, nous aurons au moins deux r\u00e8gles\u00a0: (1) traiter les minuscules \u2018<code>a<\/code>\u2019 et \u2018<code>b<\/code>\u2019 comme des \u00e9quivalents de \u2018<code>A<\/code>\u2019 et \u2018<code>B<\/code>\u2019; (2) puis comparer leurs codes respectifs. Nous appelons cette r\u00e8gle une collation <strong>sensible \u00e0 la casse<\/strong>. C&#8217;est un peu plus complexe que la r\u00e8gle pr\u00e9c\u00e9dente.<\/p>\n<p><!--more--><\/p>\n<p>En r\u00e9alit\u00e9, la plupart des jeux de caract\u00e8res ont de nombreux caract\u00e8res\u00a0: ce n&#8217;est pas simplement \u2018<code>A<\/code>\u2019 et \u2018<code>B<\/code>\u2019 mais des alphabets entiers, ou des syst\u00e8mes d&#8217;\u00e9criture orientaux avec des milliers de caract\u00e8res, incluant des caract\u00e8res sp\u00e9ciaux et la ponctuation. Dans la vraie vie, une collation a de tr\u00e8s nombreuses r\u00e8gles, concernant la sensibilit\u00e9 \u00e0 la casse ou encore l&#8217;insensibilit\u00e9 aux accents (un accent est une marque attach\u00e9e aux lettres comme le \u2018<code>\u00d6<\/code>\u2019) allemand) et les caract\u00e8res multiples comme le e dans l&#8217;o \u2018<code>\u0153<\/code>\u2019 = \u2018<code>oe<\/code>\u2019 de l&#8217;une des deux collations allemandes.<\/p>\n<p>MySQL\u00a0 peut faire cela pour vous\u00a0:<\/p>\n<div>\n<ul>\n<li>Stocker des cha\u00eenes dans diff\u00e9rents jeux de caract\u00e8res<\/li>\n<li>Comparer des cha\u00eenes \u00e0 l&#8217;aide de diff\u00e9rentes collations<\/li>\n<li>M\u00e9langer diff\u00e9rents jeux de caract\u00e8res et collations sur le m\u00eame serveur, la m\u00eame base ou m\u00eame la m\u00eame table.<\/li>\n<li>Permettre la sp\u00e9cification du jeu de caract\u00e8re et de la collation \u00e0 n&#8217;importe quel niveau<\/li>\n<\/ul>\n<\/div>\n<p>Sous cet angle, MySQL est bien plus souple que les autres bases de donn\u00e9es. Mais, pour pouvoir utiliser ces nouvelles fonctionnalit\u00e9s, vous devez savoir quels sont les jeux de caract\u00e8res et les collations disponibles, comment les modifier ou comment les utiliser avec les op\u00e9rateurs.<\/p>\n<h3>Un exemple de l&#8217;effet de collation<\/h3>\n<p>Supposons que la colonne <code>X<\/code> dans la table <code>T<\/code> a ces valeurs de colonne <code>latin1<\/code>\u00a0:<\/p>\n<pre>Muffler\nM\u00fcller\nMX Systems\nMySQL<\/pre>\n<p>Et supposons que les valeurs de la colonne soient r\u00e9cup\u00e9r\u00e9es en utilisant la commande suivante\u00a0:<\/p>\n<pre>SELECT X FROM T ORDER BY X COLLATE collation_name;<\/pre>\n<p>L&#8217;ordre r\u00e9sultant des valeurs pour diff\u00e9rentes collations est montr\u00e9 dans cette table\u00a0:<\/p>\n<div>\n<table border=\"1\">\n<colgroup>\n<col \/>\n<col \/>\n<col \/> <\/colgroup>\n<tbody>\n<tr>\n<td><code>latin1_swedish_ci<\/code><\/td>\n<td><code>latin1_german1_ci<\/code><\/td>\n<td><code>latin1_german2_ci<\/code><\/td>\n<\/tr>\n<tr>\n<td>Muffler<\/td>\n<td>Muffler<\/td>\n<td>M\u00fcller<\/td>\n<\/tr>\n<tr>\n<td>MX Systems<\/td>\n<td>M\u00fcller<\/td>\n<td>Muffler<\/td>\n<\/tr>\n<tr>\n<td>M\u00fcller<\/td>\n<td>MX Systems<\/td>\n<td>MX Systems<\/td>\n<\/tr>\n<tr>\n<td>MySQL<\/td>\n<td>MySQL<\/td>\n<td>MySQL<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<\/div>\n<p>Cette table est un exemple qui montre quel effet cela aurait si l&#8217;on utilisait des collations diff\u00e9rentes dans une clause <code>ORDER BY<\/code>. Le caract\u00e8re qui pose probl\u00e8me dans cet exemple est le U avec deux points dessus. Les allemands l&#8217;appellent U-umlaut, mais nous l&#8217;appellerons U-tr\u00e9ma.<\/p>\n<div>\n<ul>\n<li>La premi\u00e8re colonne montre le r\u00e9sultat de <code>SELECT<\/code> en utilisant la collation Su\u00e9doise\/Finlandaise, qui dit que le u-tr\u00e9ma est tri\u00e9 comme le Y<\/li>\n<li>La seconde colonne montre le r\u00e9sultat de <code>SELECT<\/code> en utilisant la r\u00e8gle German DIN-1, qui dit que le U-tr\u00e9ma est tri\u00e9 comme le U.<\/li>\n<li>La troisi\u00e8me colonne montre le r\u00e9sultat de <code>SELECT<\/code> en utilisant la r\u00e8gle German DIN-2 qui dit que le u-tr\u00e9ma est tri\u00e9 comme le UE.<\/li>\n<\/ul>\n<\/div>\n<p>Trois collations diff\u00e9rentes engendrent trois r\u00e9sultats diff\u00e9rents. MySQL est l\u00e0 pour g\u00e9rer cela. En utilisant la collation appropri\u00e9e, vous pouvez choisir l&#8217;ordre de tri que vous voulez.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>Sous SearchServer un exemple pour d\u00e9finir une table acceptant le jeu de caract\u00e8res windows-arabe :<\/strong><\/p>\n<blockquote><p>SET CHARACTER_SET &#8216;WIN_ARAB&#8217;;<br \/>\nSET NORMALIZATION &#8216;ARABIC&#8217;;<br \/>\nSET COLLATION_SEQUENCE &#8216;LOCALE&#8217;;<\/p>\n<p>CREATE SCHEMA REPLACE ILS_TBR<\/p>\n<p>CREATE TABLE ILS_TBR<br \/>\n(<br \/>\nLCK_BAS\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 NONE16384\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 394,<br \/>\nLST_TAG\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 VARCHAR(32)\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 396,<br \/>\nDATM\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 DATE\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 798<br \/>\n)NORMALIZATION &#8216;ARABIC&#8217;;<\/p><\/blockquote>\n<p><strong>Application dans mysql : tables arabis\u00e9es avec UTF-8<\/strong><\/p>\n<p>Base en unicode<\/p>\n<p>CREATE TABLE `t1_test` (<br \/>\n`c1_utf8` varchar(50) character set utf8 default NULL,<br \/>\n`c2_eng` varchar(50) default NULL<br \/>\n) ENGINE=MyISAM DEFAULT CHARSET=latin1;<\/p>\n<p>&#8212;<br \/>\n&#8212; Dumping data for table `t1_test`<br \/>\n&#8212;<\/p>\n<p>INSERT INTO `t1_test` VALUES (&#8216;\u0643\u064a\u0641 \u0627\u0644\u062d\u0627\u0644&#8217;, &#8216;test2&#8217;);<\/p>\n<p>http:\/\/electron-libre.fassnet.net\/utf8.php<\/p>\n<p><strong>APACHE :<\/strong><br \/>\n&lt;?php header(&#8220;Content-Type: text\/html; charset=utf-8&#8221;); ?&gt;<\/p>\n<p><strong>HTML :<\/strong><\/p>\n<p>&lt;meta http-equiv=&#8221;Content-Type&#8221; content=&#8221;text\/html; charset=utf-8&#8243; \/&gt;<\/p>\n<p>Au niveau codage site web et connexion ajouter au module connexion :<\/p>\n<p>&lt;?php<\/p>\n<p>mysql_connect(&#8220;serveur&#8221;,&#8221;login&#8221;,&#8221;pass&#8221;);<br \/>\nmysql_select_db(&#8220;toto_utf&#8221;);<\/p>\n<p>\/\/necessaire seulement apr\u00e8s la connection<br \/>\n<strong>mysql_query(&#8220;SET NAMES &#8216;utf8&#8242;&#8221;);<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Un jeu de caract\u00e8res est un ensemble de symboles et de codes. Une collation est un ensemble de r\u00e8gles permettant la comparaisons de caract\u00e8res dans un jeu. Pour rendre ces d\u00e9finitions plus concr\u00e8tes, voici&#46;&#46;&#46;<\/p>\n","protected":false},"author":1,"featured_media":2845,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[35],"tags":[43,89,125],"youtube_video":null,"_links":{"self":[{"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/posts\/254"}],"collection":[{"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=254"}],"version-history":[{"count":0,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/posts\/254\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=\/wp\/v2\/media\/2845"}],"wp:attachment":[{"href":"https:\/\/www.extradrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=254"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=254"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.extradrm.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=254"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}