2012-06-27 3 views
2

Je veux développer un court système d'URL, comme bitly, et j'ai un problème dans la base de données. Je ne peux pas faire la différence entre a et A dans la base de données.Le caractère a est le même que A dans la base de données MySQL

C'est ce que je l'ai enregistré dans la base de données:

1 aaaaaaa a a a a a a a aaaaaaa 1340802562 
3 aaaaaab a a a a a a b aaaaaab 1340802562 
5 aaaaaac a a a a a a c aaaaaac 1340802562 
7 aaaaaad a a a a a a d aaaaaad 1340802562 

A id 2, j'aurais dû aaaaaaB. Ce sont les propriétés de la structure de la table:

1 id bigint(20)  UNSIGNED Nu None AUTO_INCREMENT Schimbare Aruncă  More 
    2 combination varchar(8) utf8_general_ci  Nu None   Schimbare Aruncă  More 
    3 a varchar(2) utf32_general_ci  Nu None   Schimbare Aruncă  More 
    4 b varchar(2) utf8_general_ci  Nu None   Schimbare Aruncă  More 
    5 c varchar(2) utf8_general_ci  Nu None   Schimbare Aruncă  More 
    6 d varchar(2) utf8_general_ci  Nu None   Schimbare Aruncă  More 
    7 e varchar(2) utf8_general_ci  Nu None   Schimbare Aruncă  More 
    8 f varchar(2) utf8_general_ci  Nu None   Schimbare Aruncă  More 
    9 g varchar(2) utf32_general_ci  Nu None   Schimbare Aruncă  More 
    10 url varchar(255) utf8_general_ci  Nu None   Schimbare Aruncă  More 
    11 time int(10)   Nu None   Schimbare Aruncă  More 
    12 status int(10)   Nu None   Schimbare Aruncă  More 

Voici le code:

<?php 
require_once('Controller.php'); 

class ShortLink extends Controller { 
    public $chars="aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPq1Qr2Rs3St4Tu5Uv6Vw7Wx8Xy9Yz0Z"; 
    public function generate() { 
    $this->DBconnect(); 
    echo $length = strlen($this->chars); 
    for($a=0;$a<$length;$a++) { 
     for($b=0;$b<$length;$b++) { 
     for($c=0;$c<$length;$c++) { 
      for($d=0;$d<$length;$d++) { 
      for($e=0;$e<$length;$e++) { 
       for($f=0;$f<$length;$f++) { 
       for($g=0;$g<$length;$g++) { 
        $combination = $this->chars[$a].$this->chars[$b].$this->chars[$c].$this->chars[$d].$this->chars[$e].$this->chars[$f].$this->chars[$g]; 
        mysql_query(" 
        INSERT INTO `short` (
         `id`, 
         `combination`, 
         `a`, 
         `b`, 
         `c`, 
         `d`, 
         `e`, 
         `f`, 
         `g`, 
         `url`, 
         `time`, 
         `status` 
        ) 
        VALUES (
         NULL, '".($combination)."', '".($this->chars[$a])."', '".($this->chars[$b])."', '".($this->chars[$c])."', '".($this->chars[$d])."', '".($this->chars[$e])."', '".($this->chars[$f])."', '".($this->chars[$g])."', '".($combination)."', '".(time())."', '0');"); 
       } 
       } 
      } 
      } 
     } 
     } 
    } 
    $this->DBdisconnect(); 
    } 
} 
$ShortLink = new ShortLink(); 
$ShortLink->generate(); 
?> 

Répondre

11

Voir tous les utf8_general_ci s? La partie _ci signifie que le classement est Insensible à la casse.

http://dev.mysql.com/doc/refman/5.6/en/charset-unicode-sets.html

+0

dois-je utiliser utf8_bin? toute suggestion est la bienvenue –

+1

Soit 'utf8_bin' ou' utf8_general_cs'. http://stackoverflow.com/questions/4879846/how-to-configure-mysql-to-be-case-sensitive –

+0

manger avec les rois ... éclairés! – codingbiz

4

La raison pour laquelle "a" est la même chose que "A" est votre collation: utf8_general_ci

Le "ci" à la fin signifie "insensible à la casse."

Vous devez changer vos classements.

+0

utf8_bin est ok? –

+0

Pourquoi ne pas simplement utiliser utf8_general_cs'? Si vous stockez des données binaires, alors oui 'utf8_bin' est correct, sinon je choisirais simplement une variante sensible à la casse. –

+0

je ne vois aucun _cs dans la liste déroulante dans mysql :( –

Questions connexes