{"id":136,"date":"2013-04-07T10:01:05","date_gmt":"2013-04-07T08:01:05","guid":{"rendered":"http:\/\/www.lafabriquedecode.com\/blog\/?p=136"},"modified":"2013-04-07T10:03:30","modified_gmt":"2013-04-07T08:03:30","slug":"mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar","status":"publish","type":"post","link":"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/","title":{"rendered":"MySQL : comparaison rapide des types de donn\u00e9es CHAR et VARCHAR"},"content":{"rendered":"<p>Quand on choisit d&rsquo;utiliser des champs de type cha\u00eene de caract\u00e8res dans une table MySQL (mais pas que&#8230;), on en vient rapidement \u00e0 se poser la question suivante :<\/p>\n<p>CHAR ou VARCHAR ?<\/p>\n<p>Voici le tableau comparatif que nous donne la documentation <a href=\"http:\/\/dev.mysql.com\/doc\/refman\/5.0\/fr\/char.html\">MySQL<\/a>. Il\u00a0suppose que nous utilisions un jeu de caract\u00e8res cod\u00e9s sur 1 octet comme latin1 par exemple (de son vrai nom ISO 8859-1) :<\/p>\n<p><a href=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/snapshot25.png\"><img loading=\"lazy\" class=\"alignnone size-full wp-image-137\" alt=\"snapshot2\" src=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/snapshot25.png\" width=\"468\" height=\"153\" srcset=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/snapshot25.png 468w, http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/snapshot25-300x98.png 300w\" sizes=\"(max-width: 468px) 100vw, 468px\" \/><\/a><\/p>\n<p align=\"JUSTIFY\">CHAR va de 0 \u00e0 255 caract\u00e8res. La longueur d\u2019un champ de type CHAR est fix\u00e9e \u00e0 la valeur d\u00e9clar\u00e9e lors de la d\u00e9finition du champ : si vous cr\u00e9ez un champ de type CHAR(30) et que vous souhaitez y ins\u00e9rer une cha\u00eene de 31 caract\u00e8res, cette valeur sera stock\u00e9e sous une forme tronqu\u00e9e. Si la valeur ins\u00e9r\u00e9e est inf\u00e9rieure \u00e0 30, le \u00ab\u00a0reste\u00a0\u00bb (les caract\u00e8res manquants pour arriver \u00e0 30) sera combl\u00e9 avec des <em>espaces<\/em>. Lorsque la valeur sera r\u00e9cup\u00e9r\u00e9e, les espaces seront enlev\u00e9s automatiquement, vous n&rsquo;y verrez que du feu !<\/p>\n<p align=\"JUSTIFY\">Les VARCHAR sont eux utilis\u00e9s pour des cha\u00eenes de longueur\u00a0<i>variable<\/i>\u00a0et donc appropri\u00e9s pour des donn\u00e9es dont on ne peut pr\u00e9dire la longueur de fa\u00e7on certaine. VARCHAR peut stocker jusqu\u2019\u00e0 65535 caract\u00e8res (bien plus que les 255 qu&rsquo;une grande partie des gens ont en t\u00eate). Leur taille \u00e9tant <em>variable<\/em>, elle doit \u00eatre stock\u00e9e quelque part&#8230;Ainsi, pour tout type VARCHAR, MySQL r\u00e9serve un <em>pr\u00e9fixe<\/em> d\u2019un octet si la taille des donn\u00e9es est inf\u00e9rieure ou \u00e9gale \u00e0 255 (un octet = 8 bits et 2<sup>8<\/sup>\u00a0= 256) et deux octets dans le cas contraire (2 octets = 16 bits, 2<sup>16<\/sup>\u00a0= 65536).<\/p>\n<p align=\"JUSTIFY\">Que lit-on sur ce tableau ? Lorsque l&rsquo;on stocke une cha\u00eene de caract\u00e8res vide dans un champ en CHAR(4), quatre caract\u00e8res \u00ab\u00a0espace\u00a0\u00bb sont r\u00e9serv\u00e9s et donc 4 octets allou\u00e9s ; avec un VARCHAR(4), on n&rsquo;alloue que l&rsquo;octet n\u00e9cessaire au <em>pr\u00e9fixe<\/em> des cha\u00eenes de moins de 255 caract\u00e8res. Si l&rsquo;on stocke deux caract\u00e8res, en CHAR(4), deux espaces sont allou\u00e9s \u00ab\u00a0pour rien\u00a0\u00bb alors qu&rsquo;en VARCHAR(4) on a toujours l&rsquo;octet n\u00e9cessit\u00e9 par le pr\u00e9fixe et les deux octets de chaque caract\u00e8re. Jusqu&rsquo;ici, VARCHAR est moins <em>gourmand<\/em> en espace disque. La tendance s&rsquo;inverse lorsque l&rsquo;on remplit CHAR avec le nombre exact de caract\u00e8res attendus : on \u00e9conomise un octet par rapport \u00e0 un VARCHAR ! Lorsque la cha\u00eene d\u00e9passe la longueur maximale pr\u00e9vue, elle est tronqu\u00e9e dans les deux cas, mais c&rsquo;est toujours CHAR qui est plus \u00e9conomique !<\/p>\n<p align=\"JUSTIFY\">Conclusion, quand on sait qu&rsquo;une cha\u00eene de caract\u00e8res aura une longueur d\u00e9finie, mieux vaut privil\u00e9gier CHAR (si cette longueur est \u00e9videmment inf\u00e9rieure \u00e0 255, mais ce sera dans 99,99% des cas, n&rsquo;est-ce pas ?).<\/p>\n<p align=\"JUSTIFY\">\n","protected":false},"excerpt":{"rendered":"<p>Quand on choisit d&rsquo;utiliser des champs de type cha\u00eene de caract\u00e8res dans une table MySQL (mais pas que&#8230;), on en vient rapidement \u00e0 se poser la question suivante : CHAR ou VARCHAR ? Voici le tableau comparatif que nous donne la documentation MySQL. Il\u00a0suppose que nous utilisions un jeu de caract\u00e8res cod\u00e9s sur 1 octet [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0},"categories":[2],"tags":[21,19,23,22,5,6,20],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v19.6.1 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>MySQL : comparaison rapide des types de donn\u00e9es CHAR et VARCHAR - La Fabrique de code - Tech blog<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"MySQL : comparaison rapide des types de donn\u00e9es CHAR et VARCHAR - La Fabrique de code - Tech blog\" \/>\n<meta property=\"og:description\" content=\"Quand on choisit d&rsquo;utiliser des champs de type cha\u00eene de caract\u00e8res dans une table MySQL (mais pas que&#8230;), on en vient rapidement \u00e0 se poser la question suivante : CHAR ou VARCHAR ? Voici le tableau comparatif que nous donne la documentation MySQL. Il\u00a0suppose que nous utilisions un jeu de caract\u00e8res cod\u00e9s sur 1 octet [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/\" \/>\n<meta property=\"og:site_name\" content=\"La Fabrique de code - Tech blog\" \/>\n<meta property=\"article:published_time\" content=\"2013-04-07T08:01:05+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2013-04-07T08:03:30+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/snapshot25.png\" \/>\n<meta name=\"author\" content=\"admin\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@LaFabrique2Code\" \/>\n<meta name=\"twitter:site\" content=\"@LaFabrique2Code\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"admin\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"2 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/\",\"url\":\"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/\",\"name\":\"MySQL : comparaison rapide des types de donn\u00e9es CHAR et VARCHAR - La Fabrique de code - Tech blog\",\"isPartOf\":{\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#website\"},\"datePublished\":\"2013-04-07T08:01:05+00:00\",\"dateModified\":\"2013-04-07T08:03:30+00:00\",\"author\":{\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162\"},\"breadcrumb\":{\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"http:\/\/www.lafabriquedecode.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"MySQL : comparaison rapide des types de donn\u00e9es CHAR et VARCHAR\"}]},{\"@type\":\"WebSite\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#website\",\"url\":\"http:\/\/www.lafabriquedecode.com\/blog\/\",\"name\":\"La Fabrique de code - Tech blog\",\"description\":\"PHP objet, MySQL, Design Patterns, OOP...et plus !\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"http:\/\/www.lafabriquedecode.com\/blog\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Person\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162\",\"name\":\"admin\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g\",\"contentUrl\":\"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g\",\"caption\":\"admin\"},\"url\":\"http:\/\/www.lafabriquedecode.com\/blog\/author\/admin\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"MySQL : comparaison rapide des types de donn\u00e9es CHAR et VARCHAR - La Fabrique de code - Tech blog","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/","og_locale":"fr_FR","og_type":"article","og_title":"MySQL : comparaison rapide des types de donn\u00e9es CHAR et VARCHAR - La Fabrique de code - Tech blog","og_description":"Quand on choisit d&rsquo;utiliser des champs de type cha\u00eene de caract\u00e8res dans une table MySQL (mais pas que&#8230;), on en vient rapidement \u00e0 se poser la question suivante : CHAR ou VARCHAR ? Voici le tableau comparatif que nous donne la documentation MySQL. Il\u00a0suppose que nous utilisions un jeu de caract\u00e8res cod\u00e9s sur 1 octet [&hellip;]","og_url":"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/","og_site_name":"La Fabrique de code - Tech blog","article_published_time":"2013-04-07T08:01:05+00:00","article_modified_time":"2013-04-07T08:03:30+00:00","og_image":[{"url":"http:\/\/www.lafabriquedecode.com\/blog\/wp-content\/uploads\/2013\/04\/snapshot25.png"}],"author":"admin","twitter_card":"summary","twitter_creator":"@LaFabrique2Code","twitter_site":"@LaFabrique2Code","twitter_misc":{"\u00c9crit par":"admin","Dur\u00e9e de lecture estim\u00e9e":"2 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/","url":"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/","name":"MySQL : comparaison rapide des types de donn\u00e9es CHAR et VARCHAR - La Fabrique de code - Tech blog","isPartOf":{"@id":"http:\/\/www.lafabriquedecode.com\/blog\/#website"},"datePublished":"2013-04-07T08:01:05+00:00","dateModified":"2013-04-07T08:03:30+00:00","author":{"@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162"},"breadcrumb":{"@id":"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/"]}]},{"@type":"BreadcrumbList","@id":"http:\/\/www.lafabriquedecode.com\/blog\/2013\/04\/mysql-comparaison-rapide-des-types-de-donnees-char-et-varchar\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"http:\/\/www.lafabriquedecode.com\/blog\/"},{"@type":"ListItem","position":2,"name":"MySQL : comparaison rapide des types de donn\u00e9es CHAR et VARCHAR"}]},{"@type":"WebSite","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#website","url":"http:\/\/www.lafabriquedecode.com\/blog\/","name":"La Fabrique de code - Tech blog","description":"PHP objet, MySQL, Design Patterns, OOP...et plus !","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"http:\/\/www.lafabriquedecode.com\/blog\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Person","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/83863c048b82fd9ccf6407bddd241162","name":"admin","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"http:\/\/www.lafabriquedecode.com\/blog\/#\/schema\/person\/image\/","url":"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g","contentUrl":"http:\/\/0.gravatar.com\/avatar\/fc2e1de7c8a1871b50ff9c6a6f8682a2?s=96&d=retro&r=g","caption":"admin"},"url":"http:\/\/www.lafabriquedecode.com\/blog\/author\/admin\/"}]}},"_links":{"self":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/136"}],"collection":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/comments?post=136"}],"version-history":[{"count":4,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/136\/revisions"}],"predecessor-version":[{"id":140,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/posts\/136\/revisions\/140"}],"wp:attachment":[{"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/media?parent=136"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/categories?post=136"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/www.lafabriquedecode.com\/blog\/wp-json\/wp\/v2\/tags?post=136"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}