Zu php: uniqid() vers. mysql uuid()
bearbeitet von ursus contionabundoDanke erstmal für die Klarstellung:
> ~~~php
> $pits_uid = uniqid();
> ~~~
Also etwas wie "5819f3ad1c0ce". [Hoffentlich hast Du die Warnungen gelesen](http://php.net/manual/de/function.uniqid.php). Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
~~~php
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
~~~
Auf 32-Bit-Systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
**Falls Du (wegen der Warnungen) eine UUID willst.**
* Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
~~~sql
CREATE TABLE table ( col binary(16) PRIMARY KEY );
INSERT INTO table ( col ) VALUES ( UUID_BIN( UUID() ) );
~~~
Anzeigbar Lesen:
~~~sql
SELECT BIN_UUD( col ) FROM table LIMIT 1;
~~~
Selektieren anhand UUID:
~~~sql
SELECT * FROM table WHERE col = UUID_BIN( "586bcc2d-9a96-11e6-852c-4439c456d444" );
~~~
Große Geheimnisse für PHP auf Linux:
~~~php
<?php
if ( is_file ('/proc/sys/kernel/random/uuid') ) {
$UUID = file_get_contents('/proc/sys/kernel/random/uuid'); #hex
) else if ( is_file ( '/usr/bin/uuid' ) ) {
$UUID = `/usr/bin/uuid`; #hex
$UUID_BIN = `/usr/bin/uuid -F bin`; # binary!
$UUID_SIV = `/usr/bin/uuid -F siv`; # to long for real php-integer -> string
) else {
trigger_error( 'try to use a own funktion, eg: https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid', E_USER_ERROR );
}
~~~
Zu php: uniqid() vers. mysql uuid()
bearbeitet von ursus contionabundoDanke erstmal für die Klarstellung:
> ~~~php
> $pits_uid = uniqid();
> ~~~
Also etwas wie "5819f3ad1c0ce". [Hoffentlich hast Du die Warnungen gelesen](http://php.net/manual/de/function.uniqid.php). Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
~~~php
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
~~~
Auf 32-Bit-Systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
**Falls Du (wegen der Warnungen) eine UUID willst.**
* Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
~~~sql
CREATE TABLE table ( col binary(16) PRIMARY KEY );
INSERT INTO table ( col ) VALUES ( UUID_BIN ( UUID () ) );
~~~
Anzeigbar Lesen:
~~~sql
SELECT BIN_UUD( col ) FROM table LIMIT 1;
~~~
Selektieren anhand UUID:
~~~sql
SELECT * FROM table WHERE col = UUID_BIN ("586bcc2d-9a96-11e6-852c-4439c456d444");
~~~
Große Geheimnisse für PHP auf Linux:
~~~php
<?php
if ( is_file ('/proc/sys/kernel/random/uuid') ) {
$UUID = file_get_contents('/proc/sys/kernel/random/uuid'); #hex
) else if ( is_file ( '/usr/bin/uuid' ) ) {
$UUID = `/usr/bin/uuid`; #hex
$UUID_BIN = `/usr/bin/uuid -F bin`; # binary!
$UUID_SIV = `/usr/bin/uuid -F siv`; # to long for real php-integer -> string
) else {
trigger_error( 'try to use a own funktion, eg: https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid', E_USER_ERROR );
}
~~~
Zu php: uniqid() vers. mysql uuid()
bearbeitet von ursus contionabundoDanke erstmal für die Klarstellung:
> ~~~php
> $pits_uid = uniqid();
> ~~~
Also etwas wie "5819f3ad1c0ce". [Hoffentlich hast Du die Warnungen gelesen](http://php.net/manual/de/function.uniqid.php). Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
~~~php
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
~~~
Auf 32-Bit-Systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
**Falls Du (wegen der Warnungen) eine UUID willst.**
* Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
~~~sql
CREATE TABLE table ( row binary(16) PRIMARY KEY );
INSERT INTO table ( row ) VALUES ( UUID_BIN ( UUID () ) );
~~~
Anzeigbar Lesen:
~~~sql
SELECT BIN_UUD( row ) FROM table LIMIT 1;
~~~
Selektieren anhand UUID:
~~~sql
SELECT * FROM table WHERE row = UUID_BIN ("586bcc2d-9a96-11e6-852c-4439c456d444");
~~~
Große Geheimnisse für PHP auf Linux:
~~~php
<?php
if ( is_file ('/proc/sys/kernel/random/uuid') ) {
$UUID = file_get_contents('/proc/sys/kernel/random/uuid'); #hex
) else if ( is_file ( '/usr/bin/uuid' ) ) {
$UUID = `/usr/bin/uuid`; #hex
$UUID_BIN = `/usr/bin/uuid -F bin`; # binary!
$UUID_SIV = `/usr/bin/uuid -F siv`; # to long for real php-integer -> string
) else {
trigger_error( 'try to use a own funktion, eg: https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid', E_USER_ERROR );
}
~~~
Zu php: uniqid() vers. mysql uuid()
bearbeitet von ursus contionabundo~~~php
$pits_uid = uniqid();
~~~
Also etwas wie "5819f3ad1c0ce". [Hoffentlich hast Du die Warnungen gelesen](http://php.net/manual/de/function.uniqid.php). Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
~~~php
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
~~~
Auf 32-Bit-Systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
**Falls Du (wegen der Warnungen) eine UUID willst.**
* Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
~~~sql
CREATE TABLE table ( row binary(16) PRIMARY KEY );
INSERT INTO table ( row ) VALUES ( UUID_BIN ( UUID () ) );
~~~
Anzeigbar Lesen:
~~~sql
SELECT BIN_UUD( row ) FROM table LIMIT 1;
~~~
Selektieren anhand UUID:
~~~sql
SELECT * FROM table WHERE row = UUID_BIN ("586bcc2d-9a96-11e6-852c-4439c456d444");
~~~
Große Geheimnisse für PHP auf Linux:
~~~php
<?php
if ( is_file ('/proc/sys/kernel/random/uuid') ) {
$UUID = file_get_contents('/proc/sys/kernel/random/uuid'); #hex
) else if ( is_file ( '/usr/bin/uuid' ) ) {
$UUID = `/usr/bin/uuid`; #hex
$UUID_BIN = `/usr/bin/uuid -F bin`; # binary!
$UUID_SIV = `/usr/bin/uuid -F siv`; # to long for real php-integer -> string
) else {
trigger_error( 'try to use a own funktion, eg: https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid', E_USER_ERROR );
}
~~~
Zu php: uniqid() vers. mysql uuid()
bearbeitet von ursus contionabundo~~~php
$pits_uid = uniqid();
~~~
Also etwas wie "5819f3ad1c0ce". [Hoffentlich hast Du die Warnungen gelesen](http://php.net/manual/de/function.uniqid.php). Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
~~~php
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
~~~
Auf 32-Bit-Systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
**Falls Du (wegen der Warnungen) eine UUID willst.**
* Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
~~~sql
CREATE TABLE table ( row binary(16) PRIMARY KEY );
INSERT INTO table ( row ) VALUES ( UUID_BIN ( UUID () ) );
~~~
Anzeigbar Lesen:
~~~sql
SELECT BIN_UUD( row ) FROM table LIMIT 1;
~~~
Selektieren anhand UUID:
~~~sql
SELECT * FROM table WHERE row = UUID_BIN ("586bcc2d-9a96-11e6-852c-4439c456d444");
~~~
Große Geheimnisse für PHP:
~~~php
<?php
if ( is_file ('/proc/sys/kernel/random/uuid') ) {
$UUID = file_get_contents('/proc/sys/kernel/random/uuid'); #hex
) else if ( is_file ( '/usr/bin/uuid' ) ) {
$UUID = `/usr/bin/uuid`; #hex
$UUID_BIN = `/usr/bin/uuid -F bin`; # binary!
$UUID_SIV = `/usr/bin/uuid -F siv`; # to long for real php-integer -> string
) else {
trigger_error( 'try to use a own funktion, eg: https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid', E_USER_ERROR );
}
~~~
Zu php: uniqid() vers. mysql uuid()
bearbeitet von ursus contionabundo~~~php
$pits_uid = uniqid();
~~~
Also etwas wie "5819f3ad1c0ce". [Hoffentlich hast Du die Warnungen gelesen](http://php.net/manual/de/function.uniqid.php). Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
~~~php
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
~~~
Auf 32-Bit-Systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
**Falls Du (wegen der Warnungen) eine UUID willst.**
* Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
~~~sql
CREATE TABLE table ( row binary(16) PRIMARY KEY );
INSERT INTO table ( row ) VALUES ( UUID_BIN ( UUID () ) );
~~~
Anzeigbar Lesen:
~~~sql
SELECT BIN_UUD( row ) FROM table LIMIT 1;
~~~
Selektieren anhand UUID:
~~~sql
SELECT * FROM table WHERE row = UUID_BIN ("586bcc2d-9a96-11e6-852c-4439c456d444");
~~~
Großes Geheimnis:
~~~php
<?php
if ( is_file ('/proc/sys/kernel/random/uuid') ) {
$UUID = file_get_contents('/proc/sys/kernel/random/uuid'); #hex
) else if ( is_file ( '/usr/bin/uuid' ) ) {
$UUID = `/usr/bin/uuid`; #hex
$UUID_BIN = `/usr/bin/uuid -F bin`; # binary!
$UUID_SIV = `/usr/bin/uuid -F siv`; # to long for real php-integer -> string
) else {
trigger_error( 'try to use a own funktion, eg: https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid', E_USER_ERROR );
}
~~~
Zu php: uniqid() vers. mysql uuid()
bearbeitet von ursus contionabundo~~~php
$pits_uid = uniqid();
~~~
Also etwas wie "5819f3ad1c0ce". [Hoffentlich hast Du die Warnungen gelesen](http://php.net/manual/de/function.uniqid.php). Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
~~~php
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
~~~
Auf 32-Bit-Systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
**Falls Du (wegen der Warnungen) eine UUID willst.**
* Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
~~~sql
CREATE TABLE table ( row binary(16) PRIMARY KEY );
INSERT INTO table ( row ) VALUES ( UUID_BIN ( UUID () ) );
~~~
Anzeigbar Lesen:
~~~sql
SELECT BIN_UUD( row ) FROM table LIMIT 1;
~~~
Selektieren anhand UUID:
~~~sql
SELECT * FROM table WHERE row = UUID_BIN ("586bcc2d-9a96-11e6-852c-4439c456d444");
~~~
Großes Geheimnis:
~~~php
<?php
if ( is_file ('/proc/sys/kernel/random/uuid') ) {
$UUID = file_get_contents('/proc/sys/kernel/random/uuid');
) else if ( is_file ( '/usr/bin/uuid' ) ) {
$UUID = `/usr/bin/uuid`;
$UUID_BIN = `/usr/bin/uuid -F bin`; # binary!
$UUID_SIV = `/usr/bin/uuid -F siv`; # to long for real integer -> String
) else {
trigger_error('try to use a own funktion, eg: https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid', E_USER_ERROR);
}
~~~
Zu php: uniqid() vers. mysql uuid()
bearbeitet von ursus contionabundo~~~php
$pits_uid = uniqid();
~~~
Also etwas wie "5819f3ad1c0ce". [Hoffentlich hast Du die Warnungen gelesen](http://php.net/manual/de/function.uniqid.php). Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
~~~php
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
~~~
Aus 32-Bit-systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
**Falls Du (wegen der Warnungen) eine UUID willst.**
* Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
~~~sql
CREATE TABLE table ( row binary(16) PRIMARY KEY );
INSERT INTO table ( row ) VALUES ( UUID_BIN ( UUID () ) );
~~~
Anzeigbar Lesen:
~~~sql
SELECT BIN_UUD( row ) FROM table LIMIT 1;
~~~
Selektieren anhand UUID:
~~~sql
SELECT * FROM table WHERE row = UUID_BIN ("586bcc2d-9a96-11e6-852c-4439c456d444");
~~~
Großes Geheimnis:
~~~php
<?php
if ( is_file ('/proc/sys/kernel/random/uuid') ) {
$UUID = file_get_contents('/proc/sys/kernel/random/uuid');
) else if ( is_file ( '/usr/bin/uuid' ) ) {
$UUID = `/usr/bin/uuid`;
$UUID_BIN = `/usr/bin/uuid -F bin`; # binary!
$UUID_SIV = `/usr/bin/uuid -F siv`; # to long for real integer -> String
) else {
trigger_error('try to use a own funktion, eg: https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid', E_USER_ERROR);
}
~~~
Zu php: uniqid() vers. mysql uuid()
bearbeitet von ursus contionabundo~~~php
$pits_uid = uniqid();
~~~
Also das hier, also etwas wie "5819f3ad1c0ce". [Hoffentlich hast Du die Warnungen gelesen](http://php.net/manual/de/function.uniqid.php). Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
~~~php
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
~~~
Aus 32-Bit-systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
**Falls Du (wegen der Warnungen) eine UUID willst.**
* Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
~~~sql
CREATE TABLE table ( row binary(16) PRIMARY KEY );
INSERT INTO table ( row ) VALUES ( UUID_BIN ( UUID () ) );
~~~
Anzeigbar Lesen:
~~~sql
SELECT BIN_UUD( row ) FROM table LIMIT 1;
~~~
Selektieren anhand UUID:
~~~sql
SELECT * FROM table WHERE row = UUID_BIN ("586bcc2d-9a96-11e6-852c-4439c456d444");
~~~
Großes Geheimnis:
~~~php
<?php
if ( is_file ('/proc/sys/kernel/random/uuid') ) {
$UUID = file_get_contents('/proc/sys/kernel/random/uuid');
) else if ( is_file ( '/usr/bin/uuid' ) ) {
$UUID = `/usr/bin/uuid`;
$UUID_BIN = `/usr/bin/uuid -F bin`; # binary!
$UUID_SIV = `/usr/bin/uuid -F siv`; # to long for real integer -> String
) else {
trigger_error('try to use a own funktion, eg: https://stackoverflow.com/questions/2040240/php-function-to-generate-v4-uuid', E_USER_ERROR);
}
~~~
Zu php: uniqid() vers. mysql uuid()
bearbeitet von ursus contionabundo~~~php
$pits_uid = uniqid();
~~~
Also das hier, also etwas wie "5819f3ad1c0ce". [Hoffentlich hast Du die Warnungen gelesen](http://php.net/manual/de/function.uniqid.php). Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
~~~php
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
~~~
Aus 32-Bit-systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
**Falls Du (wegen der Warnungen) eine UUID willst.**
* Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
~~~sql
CREATE TABLE table ( row binary(16) PRIMARY KEY );
INSERT INTO table ( row ) VALUES ( UUID_BIN ( UUID () ) );
~~~
Anzeigbar Lesen:
~~~sql
SELECT BIN_UUD( row ) FROM table LIMIT 1;
~~~
Selektieren anhand UUID:
~~~sql
SELECT * FROM table WHERE row = UUID_BIN ("586bcc2d-9a96-11e6-852c-4439c456d444");
~~~
Zu php: uniqid() vers. mysql uuid()
bearbeitet von ursus contionabundo~~~php
$pits_uid = uniqid();
~~~
Also das hier, also etwas wie "5819f3ad1c0ce". [Hoffentlich hast Du die Warnungen gelesen](http://php.net/manual/de/function.uniqid.php). Um sicher zu gehen solltest Du nämlich einen ausreichend großen Zufallswert "anhängen". Allerdings sind die Reserven dafür (maximal 9223372036854775807 / 4503599627370495 = 2048) klein, wie das schnelle Beispiel zeigt:
~~~
<?php
# echo "<pre>";
$uid = uniqid();
echo "UID: " . $uid . "\n";
echo "Max INT: " . PHP_INT_MAX . "\n";
echo "PHP max float: " . "99999999999999" ."\n";
echo "Max UUID: " . "fffffffffffff" . "\n";
echo "(hexdec) " . hexdec("fffffffffffff") ."\n";
echo "mysql max int: " . "4294967295" . "\n";
echo "UID.dec: " . hexdec($uid) . "\n";
echo "Reserve: " . PHP_INT_MAX / hexdec("fffffffffffff") . "\n";
~~~
Aus 32-Bit-systemen geht das gar nicht vernünftig, da PHP_INT_MAX = 2147483647 und viel zu klein ist.
Aber allgemein gesagt kannst Du also hexdec benutzen und in MySQL den Datentyp BIGINT.
**Falls Du (wegen der Warnungen) eine UUID willst.**
* Bilde die UUID in MySQL, trage aber den binären Wert in die Datenbank ein. Spaltentyp ist row binary, Länge ist 16:
~~~sql
CREATE TABLE table ( row binary(16) PRIMARY KEY );
INSERT INTO table ( row ) VALUES ( UUID_BIN ( UUID () ) );
~~~
Anzeigbar Lesen:
~~~sql
SELECT BIN_UUD( row ) FROM table LIMIT 1;
~~~
Selektieren anhand UUID:
~~~sql
SELECT * FROM table WHERE row = UUID_BIN ("586bcc2d-9a96-11e6-852c-4439c456d444");
~~~