Reputation: 4801
I want to develop a short url system, like bitly, and I have a problem in the database. I can't make the difference beetween a and A in the database.
This is what I have saved in the database:
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
At id 2, I should have had aaaaaaB. This is the table structure properties:
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
This is the 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();
?>
Upvotes: 2
Views: 184
Reputation: 5846
"LIKE BINARY
" may be helpful
http://dev.mysql.com/doc/refman/5.1/en/string-comparison-functions.html#operator_like
Upvotes: 1
Reputation: 19635
The reason why "a" is the same as "A" is your collation: utf8_general_ci
The "ci" at the end stands for "case insensitive."
You need to change your collations.
Upvotes: 4
Reputation: 359876
See all those utf8_general_ci
s? The _ci
part means that the collation is Case Insensitive.
http://dev.mysql.com/doc/refman/5.6/en/charset-unicode-sets.html
Upvotes: 11