2012-06-27 16 views
2

我想開發一個簡短的url系統,就像是比較一樣,並且我在數據庫中有問題。我無法在數據庫中區分a和A.字符a與MySQL數據庫中的A相同

這是我已經保存在數據庫中:

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 

在ID 2,我應該有aaaaaaB。這是表結構特性:

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 

這是代碼:

<?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(); 
?> 

回答

11

查看所有這些utf8_general_ci S' _ci部分表示排序規則是不區分大小寫的。

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

+0

我應該使用utf8_bin?歡迎任何消化 –

+1

「utf8_bin」或「utf8_general_cs」。 http://stackoverflow.com/questions/4879846/how-to-configure-mysql-to-be-case-sensitive –

+0

用餐與國王...開明! – codingbiz

4

之所以「一」是一樣的「A」是你的歸類:utf8_general_ci

「辭」的結尾表示「不區分大小寫。」

您需要更改排序規則。

+0

utf8_bin可以嗎? –

+0

爲什麼不使用'utf8_general_cs'?如果你正在存儲二進制數據,那麼是'utf8_bin'沒問題,否則我只需要區分大小寫。 –

+0

我沒有在下拉框中看到任何_cs :( –

相關問題