Versionen dieses Beitrags

Zu php: uniqid() vers. mysql uuid()

ursus contionabundo
  • Zu php: uniqid() vers. mysql uuid()
  • Danke 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 () ) );
  • 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");
  • 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()

ursus contionabundo
  • Zu php: uniqid() vers. mysql uuid()
  • Danke 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 () ) );
  • CREATE TABLE table ( col binary(16) PRIMARY KEY );
  • INSERT INTO table ( col ) VALUES ( UUID_BIN ( UUID () ) );
  • ~~~
  • Anzeigbar Lesen:
  • ~~~sql
  • SELECT BIN_UUD( row ) FROM table LIMIT 1;
  • SELECT BIN_UUD( col ) FROM table LIMIT 1;
  • ~~~
  • Selektieren anhand UUID:
  • ~~~sql
  • SELECT * FROM table WHERE row = UUID_BIN ("586bcc2d-9a96-11e6-852c-4439c456d444");
  • 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()

ursus contionabundo
  • Zu php: uniqid() vers. mysql uuid()
  • ~~~php
  • $pits_uid = uniqid();
  • ~~~
  • Danke 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()

ursus contionabundo
  • Zu php: uniqid() vers. mysql uuid()
  • ~~~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:
  • 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()

ursus contionabundo
  • Zu php: uniqid() vers. mysql uuid()
  • ~~~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:
  • 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()

ursus contionabundo
  • Zu php: uniqid() vers. mysql uuid()
  • ~~~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');
  • $UUID = file_get_contents('/proc/sys/kernel/random/uuid'); #hex
  • ) else if ( is_file ( '/usr/bin/uuid' ) ) {
  • $UUID = `/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 integer -> String
  • $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);
  • 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()

ursus contionabundo
  • Zu php: uniqid() vers. mysql uuid()
  • ~~~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.
  • 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()

ursus contionabundo
  • Zu php: uniqid() vers. mysql uuid()
  • ~~~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:
  • 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()

ursus contionabundo
  • Zu php: uniqid() vers. mysql uuid()
  • ~~~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()

ursus contionabundo
  • Zu php: uniqid() vers. mysql uuid()
  • ~~~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");
  • ~~~